
#include <avr/io.h>
#include <util/delay.h>
#include <WS2811.h>

#define BIT(B)           (0x01 << (uint8_t)(B))
#define SET_BIT_HI(V, B) (V) |= (uint8_t)BIT(B)
#define SET_BIT_LO(V, B) (V) &= (uint8_t)~BIT(B)

#define PAUSE  1000 // msec
#define DELAY    10	// msec
 
DEFINE_WS2811_FN(WS2811RGB, PORTB, 1)

void main(void)
{

	int i = 0;
	int j = 0;	
	
    // Configure pin for output.
    SET_BIT_HI(DDRB, 1);
    SET_BIT_LO(PORTB, 1);

    // off->red, off->green, off->blue
    RGB_t rgb[10] = {{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};
    WS2811RGB(rgb, ARRAYLEN(rgb));
	

    // loop forever.
    for (;;) {

        for (i = 0; i < 255; i++) {
			for (j = 0; j < 10; j++) {
              rgb[j].r += 1; 
              rgb[j].g += 1; 
              rgb[j].b += 1; 	
			};			
            WS2811RGB(rgb, ARRAYLEN(rgb)); _delay_ms(DELAY);			
        }
		
        for (i = 0; i < 255; i++) {
			for (j = 0; j < 10; j++) {
              rgb[j].r += 1; 
              rgb[j].g = 0; 
              rgb[j].b = 0; 	
			};			
            WS2811RGB(rgb, ARRAYLEN(rgb)); _delay_ms(DELAY);			
        }
		
        for (i = 0; i < 255; i++) {
			for (j = 0; j < 10; j++) {
              rgb[j].r = 0; 
              rgb[j].g += 1; 
              rgb[j].b = 0; 	
			};			
            WS2811RGB(rgb, ARRAYLEN(rgb)); _delay_ms(DELAY);			
        }
		
        for (i = 0; i < 255; i++) {
			for (j = 0; j < 10; j++) {
              rgb[j].r = 0; 
              rgb[j].g = 0; 
              rgb[j].b += 1; 	
			};			
            WS2811RGB(rgb, ARRAYLEN(rgb)); _delay_ms(DELAY);			
        }
		
        for (i = 0; i < 255; i++) {
			for (j = 0; j < 10; j++) {
              rgb[j].r += 1; 
              rgb[j].g += 1; 
              rgb[j].b = 0; 	
			};			
            WS2811RGB(rgb, ARRAYLEN(rgb)); _delay_ms(DELAY);			
        }
		
		
        for (i = 0; i < 255; i++) {
			for (j = 0; j < 10; j++) {
              rgb[j].r += 1; 
              rgb[j].g = 0; 
              rgb[j].b += 1; 	
			};			
            WS2811RGB(rgb, ARRAYLEN(rgb)); _delay_ms(DELAY);			
        }
		
        for (i = 0; i < 255; i++) {
			for (j = 0; j < 10; j++) {
              rgb[j].r = 0; 
              rgb[j].g += 1; 
              rgb[j].b += 1; 	
			};			
            WS2811RGB(rgb, ARRAYLEN(rgb)); _delay_ms(DELAY);			
        }
		

		
		
		
    }
}
